package com.yy.starter;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;

import com.yy.servlet.StevenServlet;

/*
 * @SpringBootApplication 相当于 @Configuration, @EnableAutoConfiguration, @ComponentScan
 * scanBasePackages 定义扫描包名路径
 */
@SpringBootApplication(scanBasePackages = {"com.yy"})
/*
 * 扫描工程中的servlet, filter, listener
 * basePackages 定义扫描包名路径
 * 扫描实现的需要加上 @WebServlet(urlPatterns = "/XXX") ; @WebFilter(filterName = "XXX", urlPatterns = "/XXX") : @WebListener
 */
@ServletComponentScan(basePackages = {"com.yy"})
/*
 * mybatis 框架中的 Dao 扫描
 */
@MapperScan("com.yy.dao")
public class StarterTest {

	/*
	 * 项目结构说明:
	 * 		bean -------------------- 实体类
	 * 		config ------------------ 自定义拦截器注册类  ; 实现静态文件映射
	 * 		ctrl -------------------- controller控制器
	 * 		dao --------------------- mybatis的mapper接口
	 * 		filter ------------------ 自定义过滤器
	 * 		interceptor ------------- 自定义拦截器
	 * 		listener ---------------- 自定义监听器
	 * 		mapper ------------------ mybatis对应的sql的xml文件
	 * 		runner ------------------ 启动加载器 (容器启动时加载数据)
	 * 		service ----------------- JDBC访问数据库接口
	 * 			- impl -------------- JDBC访问数据库接口实现
	 * 		servlet ----------------- 自定义的Servlet (StevenServlet代码注册的 ; PoterServlet注解扫描的)
	 * 		starter ----------------- 启动类, 项目启动入口
	 * 		test -------------------- Junit测试类
	 */
	
	/**
	 * main方法(启动入口)
	 * @param args
	 */
	public static void main(String[] args) {
		SpringApplication.run(StarterTest.class, args);
	}
	
	/**
	 * 这里是通过代码的形式注册一个Servlet，这种形式不需要@ServletComponentScan注解, 也不需要在类上加@WebServlet的注解
	 * @return
	 */
	@Bean
	public ServletRegistrationBean servletRegistrationBean() {
        return new ServletRegistrationBean(new StevenServlet(), "/steven/*");
    }
	
}
